.TH std::ranges::forward_range 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::ranges::forward_range \- std::ranges::forward_range

.SH Synopsis
   Defined in header <ranges>
   template< class T >

   concept forward_range =                                                \fI(since C++20)\fP

       ranges::input_range<T> &&
   std::forward_iterator<ranges::iterator_t<T>>;

   The forward_range concept is a refinement of range for which ranges::begin returns a
   model of forward_iterator.

.SH Example


// Run this code

 #include <forward_list>
 #include <queue>
 #include <ranges>
 #include <span>
 #include <stack>
 #include <tuple>

 const char* str{"not a forward range"};
 const char str2[] = "a forward range";
 static_assert(
     std::ranges::forward_range<decltype("a forward range")> &&
     !std::ranges::forward_range<decltype(str)> &&
     std::ranges::forward_range<decltype(str2)> &&
     !std::ranges::forward_range<std::stack<char>> &&
     std::ranges::forward_range<std::forward_list<char>> &&
     !std::ranges::forward_range<std::tuple<std::forward_list<char>>> &&
     std::ranges::forward_range<std::span<char>> &&
     !std::ranges::forward_range<std::queue<char>> &&
 "");

 int main() {}
